home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
COMMUNIC
/
0132.ZIP
/
INNOCIO.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1985-11-02
|
3KB
|
102 lines
{******************************************************}
{ }
{ HARDWARE DEPENDENT MODULE FOR COM-PACK }
{ }
{ Contains serial I/O and modem control routines. }
{ }
{ for INNOCOMP-2 }
{ }
{******************************************************}
CONST
ADATA = $A0; { DATA IN / OUT PORT }
AIENR = $A1; { INTERRUPT ENABLE REGISTER: }
ALCR = $A3; { LINE CONTROL REGISTER: }
AWLS8 = $03; { - 8 BITS }
ADLAB = $80; { DIVISOR LATCH ACCESS BIT }
AMCR = $A4; { MODEM CONTROL REGISTER: }
ADTR = $01; { DATA TERMINAL READY }
ARTS = $02; { REQUEST TO SEND }
AOUT1 = $04; { OUT1- CONTROL }
AOUT2 = $08; { OUT2- CONTROL }
ALSR = $A5; { LINE STATUS REGISTER: }
ADR = $01; { RECEIVED DATA READY }
ABI = $10; { BREAK INTERRUPT }
ATHRE = $20; { TX HOLDING REGISTER EMPTY }
ATSRE = $40; { TX SHIFT REGISTER EMPTY }
AMSR = $A6; { MODEM STATUS REGISTER: }
ADCTS = $01; { CTS CHANGED }
ADDSR = $02; { DSR CHANGED }
ACTS = $10; { CLEAR TO SEND (CTS) }
ADSR = $20; { DATA SET READY (DSR) }
ARI = $40; { RING INDICATOR (RI) }
ARLSD = $80; { RX LINE SIGNAL DETECT (RLSD) }
ADLLS = $A0; { DIVISOR LATCH, LSB (IFF ADLAB ACTIVE) }
ADLMS = $A1; { DIVISOR LATCH, MSB (IFF ADLAB ACTIVE) }
VAR STATUSBYTE : BYTE;
{ The implementation of following routines }
{ depends entirely on the hardware present }
PROCEDURE HANG_UP; { Hang-up phone }
BEGIN
END;
PROCEDURE OFF_HOOK; { Connect phone }
BEGIN
PORT[AMCR]:= ARTS + ADTR; (* set rts and dtr *)
END;
PROCEDURE PURGE_MODEM; { Clear modem input }
VAR TRASH : BYTE;
BEGIN
TRASH := PORT[ADATA];
TRASH := PORT[ADATA];
END;
PROCEDURE INIT_MODEM; { Set-up serial I/O and modem hardware }
BEGIN
off_hook;
purge_modem;
END;
FUNCTION MODEM_INPUT_READY : BOOLEAN; { Return true if reciever ready }
BEGIN
STATUSBYTE:= PORT[ALSR];
MODEM_INPUT_READY := ((STATUSBYTE AND ADR) = ADR);
END;
FUNCTION MODEM_INPUT : byte; { Read in char from modem }
BEGIN
REPEAT UNTIL MODEM_INPUT_READY;
MODEM_INPUT:= PORT[ADATA];
END;
FUNCTION MODEM_OUTPUT_READY : BOOLEAN; { Return true if transmitter ready }
BEGIN
STATUSBYTE:= PORT[ALSR];
MODEM_OUTPUT_READY := ((STATUSBYTE AND ATHRE) = ATHRE);
END;
PROCEDURE MODEM_OUTPUT (CH : byte); { Write char out to modem }
begin
REPEAT UNTIL MODEM_OUTPUT_READY;
PORT[ADATA]:= CH;
END;
FUNCTION GETKBDATA : CHAR; (* GET KEYBOARD DATA *)
BEGIN
getkbdata := chr(bdos (6,$FF));
end;
= CH;
END;
FUNCTION GETKBDATA : CHAR; (* GET KEYBOARD